/**
 * 编写一个不并发/并行的 async+await测试
 * 这是一个没用的例子，因为不会执行任何东西，只是为了演示async+await的写法
 * rust-script -d futures  17.3_不并发的future.rs
 */
use std::thread;
use futures::executor::block_on;

struct Hero {
    name: String,
    age: u32,
}

fn main() {
    let hero = Hero {name: "孙悟空".to_string(),age: 100,};
    let ws = Hero {name: "武松".to_string(),age: 99,};
    // let str1 = run(&hero);
    // let str2 = run(&ws);

    // 使用 block_on 来执行异步函数
    // 但这个会阻塞当前线程，直到异步操作完成。所以没有异步的作用!
    let str1 = block_on(run(&hero));    
    println!("Result from str1: {}", str1);
    let str2 = block_on(run(&ws));
    println!("Result from str2: {}", str2);
}

async fn fight(h: &Hero) -> String {
    let temp = h.name.clone() + "正在战斗中....";
    println!("{}", temp);
    //等待5秒钟
    thread::sleep(std::time::Duration::from_secs(5));
    temp.to_string()
}
//这个方法要返回实现Debug特质的类型
async fn run(h: &Hero) -> String {
    let r = fight(&h).await;
    r
}
